'use strict';


var globalObj = typeof window === 'undefined' ? global : window ;

var fetchFun = function () {

    var wxfetch = require('./wxfetch').default();
//如果在微信小程序中，则返回微信的 WX.
    if (wxfetch){
        return wxfetch;
    } else if (typeof fetch == 'function') {
        //如果有全局 fetch 对象
        return fetch;
    } else if (typeof globalObj.fetch == 'function') {
        return globalObj.fetch;
    } else {

        var userAgent = typeof window !== 'undefined' && window && window.navigator && window.navigator.userAgent; //取得浏览器的userAgent字符串
        var isIE = userAgent && userAgent.indexOf && userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
        var isIE11 = userAgent && userAgent.indexOf && userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;

        if (isIE || isIE11) {
            //如果在 ie 环境中，返回 ajax 模拟的 fetch
            return require('./ajax-fetch').default
        }

        //采用 node-fetch 模拟 fetch 函数
        var nodeFetch = null;

        if(process &&  process.emitWarning){
            //如果在 node 环境中
            nodeFetch = require('./node-fetch')
        }
        
        if(nodeFetch != null) {
            //加载成功，表明在 node 环境下
            var realFetch = nodeFetch.default || nodeFetch

            /**
             * 给全局对象添加 fetch 相关对象
             * 如果 global 中已经用 fetch 相关对象时，采用原来对象
             *
             * 如果在浏览器环境中，则是需要设置 fetch 的
             *
             */
            globalObj.fetch = globalObj.fetch || realFetch
            globalObj.Headers = globalObj.Headers || nodeFetch.Headers
            globalObj.Request = globalObj.Request || nodeFetch.Request
            globalObj.Response = globalObj.Response || nodeFetch.Response

            return globalObj.fetch;
        }
    }
    //其他情况下采用 ajax 实现
    return require('./ajax-fetch').default
}

export default fetchFun;
